/**
 * 
 */
package com.teamall.web.tssy.service.impl;

import java.math.*;
import java.util.*;

import javax.annotation.Resource;

import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.teamall.core.common.Page;
import com.teamall.framework.util.IdCreateUtils;
import com.teamall.framework.util.StringUtils;
import com.teamall.core.convert.IArgConversionService;
import com.teamall.core.idproduce.ISequenceGenerator;
import com.teamall.framework.exception.BaseAppException;
import com.teamall.framework.log.LogManager;
import com.teamall.web.tssy.db.arg.TsSyAreaArg;
import com.teamall.web.tssy.db.arg.TsSyAreaArg.TsSyAreaCriteria;
import com.teamall.web.tssy.db.dao.TsSyAreaDao;
import com.teamall.web.tssy.db.po.TsSyAreaPO;
import com.teamall.web.tssy.db.po.TsSyAreaPOEX;
import com.teamall.web.tssy.service.ITsSyAreaService;

/**
 * <Description> <br>
 * 
 * @author codeCreater<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2014年11月11日 <br>
 * @since V1.0<br>
 * @see com.teamall.web.tssy.service.impl <br>
 */

@Service("tsSyAreaService")
public class TsSyAreaServiceImpl implements ITsSyAreaService {

    private static final LogManager logger = LogManager
            .getLogger(TsSyAreaServiceImpl.class);

    @Autowired
    private TsSyAreaDao tsSyAreaDao;
    

    /**
     * 查询条件转换成Arg类的服务接口
     */
    @Resource(name = "defaultArgConversionService")
    private IArgConversionService argConversionService;

    /**
     * 主键生成器
     */
    @Resource(name = "sequenceProcGenerator")
    private ISequenceGenerator sequenceGenerator;
    

    @Override
    public TsSyAreaPO selectByPrimaryKey(String key) throws BaseAppException {
    	logger.debug("selectByPrimaryKey begin...id={0}", key);
        // ///////e
        // TODO 根据业务场景，设置查询条件、数据校验等

        // ///////
        return tsSyAreaDao.selectByPrimaryKey(key);
    }

    @Override
    public List<TsSyAreaPO> selectByArg(TsSyAreaPO record) throws BaseAppException {
        logger.debug("selectByArg begin...record={0}", record);

        // 第一种方式：自己创建arg，自行设置查询条件及操作符
        //TsSyAreaArg arg = new TsSyAreaArg();
        //TsSyAreaCriteria criteria = arg.createCriteria();
        
        // 第二种方式：利用arg转换服务，转换出arg，带上查询条件及操作符，
        // 转换后，还可以自行对arg进行设置修改
        record.addNewConditions("isDel", "F");
        TsSyAreaArg arg = argConversionService.invokeArg(TsSyAreaArg.class, record);

        // ///////
        // TODO 根据业务场景，设置查询条件，示例
        // if (Utils.notEmpty(record.getUserName())) {
        // criteria.andUserNameLike(record.getUserName());
        // }
        // ///////

        return tsSyAreaDao.selectByArg(arg);
    }

    @Override
    public Page<TsSyAreaPO> selectByArgAndPage(TsSyAreaPO record, Page<TsSyAreaPO> resultPage)
            throws BaseAppException {
        logger.debug("selectByArgAndPage begin...record={0}", record);

        // 第一种方式：自己创建arg，自行设置查询条件及操作符
        // TsSyAreaArg arg = new TsSyAreaArg();
        // //TODO 根据业务场景，设置查询条件，示例
        // TsSyAreaCriteria criteria = arg.createCriteria();
        // if (Utils.notEmpty(record.getUserName())) {
        // criteria.andUserNameLike(record.getUserName());
        // }
        // 第二种方式：利用arg转换服务，转换出arg，带上查询条件及操作符，
        // 转换后，还可以自行对arg进行设置修改
        TsSyAreaArg arg = argConversionService.invokeArg(TsSyAreaArg.class, record);

        resultPage = tsSyAreaDao.selectByArgAndPage(arg, resultPage);

        return resultPage;
    }

    @Override
    public int add(TsSyAreaPO record) throws BaseAppException {
        logger.debug("add begin...record={0}", record);

        // TODO 根据业务场景，进行重名校验、设置主键、设置属性默认值等
        // 获取主键
        
    	String pkId =  IdCreateUtils.createId();
    	record.setId(pkId);

        return tsSyAreaDao.insertSelective(record);
    }

    @Override
    public int update(TsSyAreaPO record) throws BaseAppException {
        logger.debug("update begin...record={0}", record);

        // ///////
        // TODO 根据业务场景，进行重名校验、数据有效性校验、设置属性默认值等
        // ///////

        return tsSyAreaDao.updateByPrimaryKeySelective(record);
    }
    
    @Override
    public int updateStatus(String id) throws BaseAppException {
        logger.debug("updateStatus begin...id={0}", id);

        // ///////
        // TODO 根据业务场景，进行重名校验、数据有效性校验、设置属性默认值等

        String idStr = "";
        TsSyAreaPO po = new TsSyAreaPO();
        if(StringUtils.isNotEmpty(id)){
        	String[] ids = id.split(",");
            for(String tempId:ids){
            	idStr+="'"+tempId+"',";
            }
            po.setId(idStr.substring(0, idStr.length()-1));
            po.setIsDel("0");
        }else{
        	throw new BaseAppException("选择的记录ID为空");
        }
        return tsSyAreaDao.updateByPrimaryKeys(po);
        
    }

    @Override
    public int delete(TsSyAreaPO record) throws BaseAppException {
        logger.debug("delete begin...record={0}", record);
        // ///////
        // TODO 根据业务场景，进行关联性校验、关联删除等
        // ///////
        
        return tsSyAreaDao.deleteByPrimaryKey(record.getId());
    }

	@Override
	public List<TsSyAreaPO> getIdNameList(TsSyAreaPO record) throws BaseAppException {
		// TODO Auto-generated method stub
		  logger.debug("selectByArg begin...record={0}", record);

	        List resList = new ArrayList();
	        String pid = "0";
	    	if(record!=null&&record.getPid()!=null&&!"0".equals(record.getPid())){
	    		pid=String.valueOf(record.getPid());
	    	}
	    	record.addNewConditions("pid", pid);
	    	TsSyAreaArg arg = argConversionService.invokeArg(TsSyAreaArg.class, record);

	        List<TsSyAreaPO> list = tsSyAreaDao.selectByArg(arg);
	        
	        for(TsSyAreaPO po:list){
	        	JSONObject json = new JSONObject();
	        	try {
					json.append("ID",po.getId());
					json.append("areaName",po.getAreaName());
		        	json.append("FullName",po.getFullName());
		        	json.append("FullId",po.getFullId());
				} catch (JSONException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
	        	resList.add(json);
	        }
	        System.out.println(resList.toString());
	        return resList; 
	}

	@Override
	public List<TsSyAreaPO> selectListByPo(TsSyAreaPOEX record) throws BaseAppException {
		// TODO Auto-generated method stub
		logger.debug("selectByArg begin...record={0}", record);

        List resList = new ArrayList();

        List<TsSyAreaPO> list = tsSyAreaDao.selectListByPo(record);
        
        for(TsSyAreaPO po:list){
        	JSONObject json = new JSONObject();
        	try {
				json.append("ID",po.getId());
				json.append("areaName",po.getAreaName());
	        	json.append("FullName",po.getFullName());
	        	json.append("FullId",po.getFullId());
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        	resList.add(json);
        }
        return resList; 
	}

}
